package com.turing.post.account.util;

import java.math.BigInteger;
import java.util.List;

import javax.ejb.Local;
import javax.ejb.Remote;

import com.turing.post.util.PCPSApplicationException;
import com.turing.post.util.PCPSWebInput;

/**
 * 子帐户接口
 * 
 * @author ZXL
 * 
 */
@Remote
@Local
public interface SubAccountDao {
	/**
	 * 插入子帐户记录
	 * 
	 * @param sac
	 *            子帐户对象
	 * @throws PCPSApplicationException
	 *             异常信息
	 */
	public void insert(SubAccount sac) throws PCPSApplicationException;

	/**
	 * 更新子帐户记录
	 * 
	 * @param sac
	 *            子帐户对象
	 * @throws PCPSApplicationException
	 *             异常信息
	 */
	public void update(SubAccount sac) throws PCPSApplicationException;

	/**
	 * 根据子帐号号检索子帐户
	 * 
	 * @param subAccNo
	 *            子帐号号
	 * @return 子帐户对象
	 */
	public SubAccount getSubAccountBySubAccNo(BigInteger subAccNo);

	/**
	 * 根据卡号或卡序号获取子账户列表
	 * 
	 * @param cardNo
	 * @return
	 */
	public List<SubAccount> getSubAccListByCardNoOrCardSeqNo(
			PCPSWebInput webInput, String cardNo);

	/**
	 * 记录锁定,准备更新
	 * 
	 * @param subAccNo
	 *            子帐号号
	 */
	public SubAccount getSubAccountBySubAccNoForUpdate(BigInteger subAccNo);

	/**
	 * 计算某主帐户下所有子帐户的余额
	 * 
	 * @param masterAccNo
	 *            主帐号
	 * @return 主帐户下所有子帐户的余额
	 */
	public BigInteger getAllSubAccountBalanceByMasterAccNo(
			BigInteger masterAccNo);

	/**
	 * 获取某主帐户下可以支付的所有子帐户
	 * 
	 * @param masterAccNo
	 *            主帐号
	 * @return 主帐户下可以支付的所有子帐户列表
	 */
	public List<SubAccount> getAllSubAccountForPaidByMasterAccNo(
			BigInteger masterAccNo);

	/**
	 * 根据主账号查询所有子账号列表
	 * 
	 * @param masterAccNo
	 * @return
	 */
	public List<SubAccount> getSubAccountListByMasterAccNo(
			BigInteger masterAccNo);
}
